using System;
using System.Collections.Generic;
using System.Text;
using RC.ControlAcceso.BaseDatos;
using System.Data;
using RC.CodigoBarras.Utiles;

namespace RC.ControlAcceso.ObjetosNegocio
{
    public class CA2Tarea
    {
        #region Variables
        private int _idTarea;
        private string _descripcion;
        private bool _estaActivo;

        // Objeto de la base de datos
        CATareaBD mTareaBD;
        #endregion

        #region Propiedades
        public CATareaBD TareaBD
        {
            get {
                if (mTareaBD == null)
                {
                    mTareaBD = new CATareaBD();
                }
                return mTareaBD;
            }
            set {
                mTareaBD = value;
            }
        }
        public int IdTarea
        {
            get { return _idTarea; }
            set { _idTarea = value; }
        }        
        public string Descripcion
        {
            get { return _descripcion; }
            set { _descripcion = value; }
        }
        public bool EstaActivo
        {
            get { return _estaActivo; }
            set { _estaActivo = value; }
        }        
           
        #endregion

        #region Constructores
        public CA2Tarea()
        {
            TareaBD = new CATareaBD();
            AsignarValoresIniciales();
        }        
        public CA2Tarea(int pIdTarea)
        {
            TareaBD = new CATareaBD(pIdTarea);
            AsignarBDaON();
        }
        public CA2TareaColeccion ObtenerTarea(int pIdTarea)
        {
            TareaBD = new CATareaBD(pIdTarea);
            AsignarBDaON();

            CA2TareaColeccion _tareas = new CA2TareaColeccion();
            _tareas.Add(this);
            return _tareas;
        }
        private void AsignarValoresIniciales()
        {
            IdTarea = -1;
            Descripcion = "";
            EstaActivo = true;
        }
        #endregion

        #region Funciones
        /// <summary>
        /// Asigna los datos del objeto de base de datos a el objeto de negocio.
        /// </summary>
        private void AsignarBDaON()
        {
            if (mTareaBD == null)
                return;

            IdTarea = mTareaBD.idTarea;
            Descripcion = mTareaBD.Descripcion;            
            EstaActivo = mTareaBD.EstaActivo;
        }
        /// <summary>
        /// Asigna los datos del objeto de negocio al objeto de base de datos.
        /// </summary>
        private void AsignarONaBD()
        {
            if (mTareaBD == null)
                mTareaBD = new CATareaBD();

            mTareaBD.idTarea = IdTarea;
            mTareaBD.Descripcion = Descripcion;            
            mTareaBD.EstaActivo = EstaActivo;
        }        
        /// <summary>
        /// Agrega un Tarea.
        /// </summary>
        /// <returns>No devuelve nada.</returns>
        public void Agregar()
        {
            AsignarONaBD();
            TareaBD.idTarea = TareaBD.Insertar();            
            AsignarBDaON();
        }
        /// <summary>
        /// Actualiza el objeto.
        /// </summary>
        /// <returns>No devuelve nada.</returns>
        public void Actualizar()
        {
            AsignarONaBD();
            TareaBD.Actualizar();
        }
        /// <summary>
        /// Carga un objeto.
        /// </summary>
        /// <returns>No devuelve nada.</returns>
        public void Editar()
        {
            AsignarONaBD();
            TareaBD.Editar();
            AsignarBDaON();
        }        
                
        public CA2Tarea AsignarRowATarea(DataRow pRow)
        {
            CA2Tarea _tarea = new CA2Tarea();
            
            _tarea.IdTarea = int.Parse(pRow["IdTarea"].ToString());
                        
            _tarea.Descripcion = pRow["Descripcion"].ToString();           

            try { _tarea.EstaActivo = bool.Parse(pRow["EstaActivo"].ToString()); }
            catch { _tarea.EstaActivo = true; }

            return _tarea;
        }
        #endregion

 
    }
    public class CA2TareaColeccion : System.Collections.CollectionBase
    {
        public void Add(CA2Tarea pTarea)
        {
            this.List.Add(pTarea);
        }
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public CA2Tarea this[int index]
        {
            get { return ((CA2Tarea)(this.List[index])); }
            set { this.List[index] = value; }
        }
        /// <summary>
        /// Devuelve el objeto Tarea que corresponde al nombre especificado.
        /// Si la Tarea no existe, devuel Null.
        /// </summary>
        /// <param name="pNombreTarea"></param>
        /// <returns></returns>
        public CA2Tarea ObtenerTareaPorNombre(string pNombreTarea)
        {
            foreach (CA2Tarea _tarea in this)
                try
                {
                    if (_tarea.Descripcion.ToUpper() == pNombreTarea.ToUpper())
                        return _tarea;
                }
                catch { }

            // si no lo encuentra devuelve vacio
            return null;
        }
        /// <summary>
        /// Obtiene todas las Tareas
        /// </summary>
        public CA2TareaColeccion ObtenerTodasLasTareas()
        {
            CATareaBD _tarea = new CATareaBD();
            DataSet _tareasDS = _tarea.Recuperar();
            return AsignarDatasetAColeccion(_tareasDS);
        }
        /// <summary>
        /// Asigna los valores del dataset a el objeto coleccion.
        /// </summary>
        /// <param name="pDSLegajos"></param>
        /// <returns></returns>
        private CA2TareaColeccion AsignarDatasetAColeccion(DataSet pTareasDS)
        {
            if ((pTareasDS == null) || (pTareasDS.Tables[0].Rows.Count == 0))
                return null;

            CA2TareaColeccion _resultado = new CA2TareaColeccion();
            CA2Tarea _tarea = new CA2Tarea(); //lo creo aca por que tengo que usar solamente un metodo que tiene 

            // recorro todas las filas y cargo los objetos
            foreach (DataRow _row in pTareasDS.Tables[0].Rows)
            {
                // asigno los valores a el objeto y el objeto a la coleccion
                _resultado.Add(_tarea.AsignarRowATarea(_row));
            }

            return _resultado;

        }
        /// <summary>
        /// Obtiene todas las Tareas activas utilizables
        /// </summary>
        /// <returns></returns>
        private CA2TareaColeccion ObtenerTareasActivas()
        {
            CA2TareaColeccion _resultado = new CA2TareaColeccion();
            foreach (CA2Tarea _tarea in this)
                if (_tarea.EstaActivo == true)
                    _resultado.Add(_tarea);

            return _resultado;
        }
    }
}